# =================================================================
# Dockerfile for Unturned Dedicated Server (Build: V3.5 - Optimized Layer Caching)
# 集成 SteamCMD, Unturned, cron 和 tmux, 实现自洽的自动保存和优雅关停
# =================================================================

# 1. 基础镜像
FROM debian:12-slim

# 2. 环境变量 (很少变动)
ENV TZ=Asia/Shanghai
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV STEAMCMD_DIR="/data/steamcmd"
ENV UNTURNED_DIR="/data/unturned"
ENV UNTURNED_APP_ID="1110390"

# 3. 系统级依赖安装 (只有在需要新软件时才变动)
# 将所有 apt 操作放在一个 RUN 命令中以减小镜像体积
RUN set -eux; \
    # 配置国内镜像源
    sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources; \
    # 添加 i386 架构并更新
    dpkg --add-architecture i386; \
    apt-get update; \
    # 安装所有依赖
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        locales \
        tzdata \
        cron \
        tmux \
        wget \
        bsdutils \
        lib32gcc-s1 \
        libsdl2-2.0-0:i386; \
    # 清理 apt 缓存
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*;

# 4. 安装 SteamCMD (只有在 SteamCMD 更新方式改变时才变动)
# 这一层会被缓存，除非上面的依赖层发生变化
RUN set -eux; \
    mkdir -p ${STEAMCMD_DIR}; \
    cd ${STEAMCMD_DIR}; \
    wget -qO- "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar xvz; \
    chmod +x ${STEAMCMD_DIR}/steamcmd.sh;

# 5. 安装/更新 Unturned 游戏本体 (这是一个很慢的步骤，现在被独立出来)
# 只有在你想强制更新游戏时，才需要让这一层的缓存失效
# (例如，通过 `docker build --no-cache` 或修改这一行)
RUN set -eux; \
    ${STEAMCMD_DIR}/steamcmd.sh \
        +force_install_dir ${UNTURNED_DIR} \
        +login anonymous \
        +app_update ${UNTURNED_APP_ID} validate \
        +quit;

# 6. 配置开服脚本 myServer.sh (这是你最常改动的部分)
# 因为它在所有下载步骤之后，修改它不会触发重新下载
RUN set -eux; \
    echo ">>> Creating/Updating myServer.sh..."; \
    echo '#!/bin/bash' > ${UNTURNED_DIR}/myServer.sh; \
    echo 'export LD_LIBRARY_PATH="${UNTURNED_DIR}/linux64:$LD_LIBRARY_PATH"' >> ${UNTURNED_DIR}/myServer.sh; \
    COMMAND_TO_RUN="./Unturned_Headless.x86_64 -nographics -batchmode +InternetServer/MyServer"; \
    LOG_FILE="/data/unturned/Servers/MyServer/output.log"; \
    echo "exec script -q -c \"${COMMAND_TO_RUN}\" \"${LOG_FILE}\"" >> ${UNTURNED_DIR}/myServer.sh; \
    chmod +x ${UNTURNED_DIR}/myServer.sh;

# 7. 复制 crontab 配置文件并设置权限 (很少变动)
COPY unturned-cron /etc/cron.d/unturned-cron
RUN chmod 0644 /etc/cron.d/unturned-cron

# 8. 配置语言和时区 (很少变动)
RUN set -eux; \
    echo "${LANG} UTF-8" > /etc/locale.gen; \
    locale-gen ${LANG}; \
    update-locale LANG=$LANG LC_ALL=$LANG; \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone

# 9. 设置工作目录
WORKDIR ${UNTURNED_DIR}

# 10. 复制启动脚本
COPY start-unturned.sh /start-unturned.sh
RUN chmod +x /start-unturned.sh

# 11. 暴露端口
EXPOSE 27015/udp 27016/udp 27017/udp

# 12. 定义数据卷
VOLUME ["/data/unturned/Servers/MyServer"]

# 13. 入口点
ENTRYPOINT ["/start-unturned.sh"]

# 14. 默认命令
CMD []
